
	   -----------------------------
	    I.D.T. Master Hooker Driver
	   -----------------------------

 This "Hardware master driver" is programmed to hook
 ALL the IDT gates (interrupts, traps, faults and tasks)
 for executing its code before calling the original ISR.
 It has also the function to customise the range of IDT
 gates we want to hook.

 This project is my last one about hooking interrupt
 in a operating system, because i'm bored now by them.
 They are just too simple (for me) to modify as i want!

 I made generical hooked functions for who want to make
 his personal hook routine, but if you aren't able to
 do it you shouldn't modify them or you can cause a
 crash on your system! (the blue screen of PC death)
 Any modification to this code is at own risk...

 I optimized the code to make it smaller as possible,
 and in the same time has a lot of freatures and error
 control checks (seems to be PERFECT).

 FREATURES: 1) All the hooked interrupts become available
	       for USER-MODE call (using INT or CALL FAR)
	       after the driver load.
	       Unloading the driver restores the original
	       state of the IDT.

	    2) The driver doesn't use imported function
	       from NT kernel or other KM libraries.
	       It do all by itself.

	    3) The driver exports its functions for who
	       wants use them indirectly form other
	       kernel mode locations.

	    4) Is possible to customize the hook range by
	       setting the VECTOR_START and VECTORS_LIMIT
	       constants (also you have to modify the
	       "PrepareHookedList" function).

	    5) All hooked ISR are personalizables for
	       code PRE-EXECUTION and POST-EXECUTION
	       (referred to the original ISR).
	       I wrote them only for standard PRE-EXECUTION
	       because some interrupt are kernel functions
	       that change the IRET stack and then you have
	       to modify it manually for any of them.

 CONTROLS: 1) Deactivating the most part of interrupts
	      by clearing the IF flag when the driver
	      is modifing an IDT gate.

	   2) The driver checks if the requested gate
	      isn't over the IDT limit.
	      For any reason, some vectors may not be
	      available. (who knows)

	   3) During driver loading, the start routine
	      will restore all the IDT gates it changed
	      if an error occurs.
	      An unsuccessful code will stop the loading.

 In conclusion, i prefer remember:
    the power is nothing without control:
    the power can miss, but the control can't.


				Pirata [PHOENIX] Derek L.S.